//
//  LockViewController.swift
//  test-ios
//
//  Created by wyz5204 on 2023/6/6.
//

import UIKit

/**
 OSSpinLock(自旋锁)
 dispatch_semaphone（信号量）
 pthread_mutex（互斥锁）
 NSLock（互斥锁）
 NSCondition（条件锁）
 pthread_mutex（recursive 互斥递归锁）
 NSRecursiveLock（递归锁）
 NSConditionLock（条件锁）
 synchronized（互斥锁）

 作者：f8d1cf28626a
 链接：https://www.jianshu.com/p/c1caeccb9202
 来源：简书
 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
class LockViewController: ABaseViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    }
    
}


class Singled {
    private static let lock = DispatchSemaphore.init(value: 1)
    
    public static func shared() -> Singled{
        if let shared = _shared {
            return shared
        }
        lock.wait()
        defer{
            lock.signal()
        }
        if let shared = _shared {
            return shared
        }
        let dbModel = Singled()
        _shared = dbModel ;
        return dbModel
    }
    
    public static func release(){
        lock.wait()
        defer{
            lock.signal()
        }
        _shared = nil
    }
    
    private static var _shared : Singled? = Singled()
}
